<!--
 * @Author: weidewei
 * @Date: 2025-10-29 10:49:27
 * @LastEditors: weidewei
 * @LastEditTime: 2025-10-29 14:47:21
 * @Description: 
 * @FilePath: \2025-front-face\review-knowledge\20251028\复习原型链.html
-->
<script>
    // 1. 自定义函数 2. Function的构造函数 3. Object构造函数
    // 自定义函数
    function Person() {}
    // 自定义函数的原型
    Person.prototype
    let person = new Person();
    

    console.log(person.__proto__ === Person.prototype)  // true
    console.log(Person.__proto__ === Function.prototype) // true  
    console.log(Function.__proto__ === Function.prototype) // true（自引用）
    console.log(Object.__proto__ === Function.prototype) // true

    console.log('===========================================')

    // 下面的代码输出什么？
    function User() {}
    User.prototype.sayHello = function () {};

    var u1 = new User();
    var u2 = new User();

    console.log(u1.sayHello === u2.sayHello); // true: 实例共享原型对象的方法
    console.log(User.prototype === Function.prototype); // false: 自定义函数的原型对象 === 自定义函数的显示原型
    console.log(User.__proto__ === Function.prototype); // true
    console.log(User.__proto__ === Function.__proto__); // true
    console.log(u1.__proto__ === u2.__proto__); // true
    console.log(u1.__proto__ === User.__proto__); // false
    console.log(Function.__proto__ === Object.__proto__); // true
    console.log(Function.prototype.__proto__ === Object.prototype.__proto__); // false
    console.log(Function.prototype.__proto__ === Object.prototype); // true



    console.log({} instanceof Object); // true
    console.log({}.toString instanceof Function); // true
    console.log(Object instanceof Function); // true
    console.log(Function instanceof Object); // false

</script>